草庐IT

Java Swingworker 和多线程

全部标签

c++ - 等待条件的非线程替代方法。 (编辑 : Proactor pattern with boost. asio?)

我正在实现一个消息传递算法。当相邻节点在节点上有足够的信息来组成消息时,消息就会在相邻节点之间传递——从相邻节点传递到该节点的信息。如果我让每条消息成为一个线程并使用boost::condition使线程休眠直到所需信息可用,那么实现就很简单了。不幸的是-我在图表中有100k个节点,这意味着300k个线程。当我asked如何制作那么多线程答案是我不应该-而是重新设计。我的问题是:是否有用于等待条件的标准设计模式?也许是某种异步控制模式?编辑:我想我可以用proacator模式做到这一点。我已经编辑了标签以包含boost::asio-看看是否有人对此有建议。所以讨论可以是具体的,这里是到

c++ - 如何安全地关闭线程?

pthread_create(&thread,NULL,AcceptLoop,(void*)this);我已经这样声明,并且在AcceptLoop函数内部我有无限while循环。我想在服务器关闭时关闭此线程。我已经阅读了pthread_cancel和pthread_join,但我不确定哪个更好更安全。我想听听一些详细的说明或教程。提前致谢。 最佳答案 你什么都不用做,只要从线程函数返回就可以干净利落地结束线程。您也可以调用pthread_exit()但我宁愿返回。pthread_cancel()可怕且复杂/难以正确处理。如果可能的话

c++ - 为什么win32线程不自动退出?

背景:在我用C++编写的应用程序中,我创建了一个工作线程,该工作线程又使用CreateThread()创建了两个线程.工作线程创建的两个线程通过使用WindowsWebServicesAPI实现的客户端与WCF服务通信。它提供C/C++应用程序编程接口(interface)(API),用于构建基于SOAP的Web服务和客户端。我的应用程序仅使用此API的客户端。问题:我面临的问题是,除工作线程外,所有其他线程都正常退出,正如您自己所见,在下图中WorkerThreadProc不使用CPU周期但它不导出。还有一些其他线程正在运行,它们不是由我创建的,而是由运行时创建的。线程状态如下(由P

c++ - 我可以在 MFC 中有多个 GUI 线程吗?

我有一个基于MFC的大型应用程序,它在主线程中包含一些可能非常慢的任务。这可以使应用程序看起来像是挂起,而实际上它正在完成一项长时间的任务。从可用性的角度来看,我想为用户提供更多有关进度的反馈,并可以选择以干净的方式中止任务。虽然将长期任务分散到单独的线程中将是一个更好的长期解决方案,但我认为实用的短期解决方案是创建一个新的GUI线程,封装在它自己的对象中,并带有包含进度条和取消按钮的对话框,用于类似于CWait对象的方式。主线程通过IsCancelled方法监控取消状态,并在需要时通过抛出结束。这是一种合理的方法吗?如果是的话,是否已经有一些MFC代码可供我使用,或者我应该自己编写?

C++ Tensorflow,如何使用多线程制作session-> Run(),或者花费更少的时间

我在CPU上运行以下所有内容。我运行示例ensorflow/examples/label_image花费7~8秒。据我所知,python花费大约0.5秒来处理相同的样本,这是因为“TensorFlowSession对象是多线程的,因此多个线程可以轻松地使用相同的session并并行运行操作。”。但是,如何使用C++在Session上设置多线程。我尝试...我在“tensorflow/tensorflow/core/common_runtime/direct_session.cc”中硬编码第81行:“constint32num_threads=16;”但是,它不起作用。我如何设置一些配置

c++ - 多线程 vector 和的可扩展性

这是一段用于多线程vector求和的C++11代码。#includetemplatevoidsum_partial(ITERa,ITERb,double&result){result=std::accumulate(a,b,0.0);}templatedoublesum(ITERbegin,ITERend,unsignedintnb_threads){size_tlen=std::distance(begin,end);size_tsize=len/nb_threads;std::vectorthr(nb_threads-1);std::vectorr(nb_threads);size

c++ - future 可以安全地传递给分离的线程吗?

将std::future传递给std::thread的分离实例是安全操作吗?我知道在下面,std::future在与std::promise共享的shared_ptr中有状态。这是一个例子。intmain(){std::promisep;std::thread([f=p.get_future()](){if(f.wait_for(std::chrono::seconds(2))==std::future_status::ready){return;}std::terminate();}).detach();//waitforsomeoperationp.set_value();}在上面

c++ - 计算一个 cuda 内核有多少 block 和线程,以及如何使用它们

我一直在努力弄清楚如何制作一个我认为是简单的内核来取二维矩阵中的值的平均值,但我在直接思考它时遇到了一些问题。根据我的deviceQuery输出,我的GPU有16MP,32cores/mp,block最大为1024x1024x64,我有最大线程/block=1024。所以,我正在处理一些大图像。也许5000pxx3500px或类似的东西。我的一个内核正在对图像中的所有像素取一些值的平均值。现有代码将图像存储为二维数组[行][列]。因此,在C中,内核看起来像您期望的那样,有一个遍历行的循环和一个遍历列的循环,中间有计算。那么如何在CUDA中设置这段代码的维度计算部分呢?我看过SDK中的缩

c++ - 多线程安全消息队列

这是我的本质:我有线程A,它定期检查消息并处理它们。线程B和C需要向A发送消息。当B和C或B或C试图向A发送消息而A正在处理消息并因此访问队列时,就会出现问题。这个问题通常是怎么解决的?谢谢 最佳答案 这通常使用mutexes解决,或其他多线程保护机制。如果您在Windows上工作,MFC会提供CMutexclass对于这个问题。如果您在posix系统上工作,posixapi会提供pthread_mutex_lock,pthread_mutex_unlock,andpthread_mutex_trylockfunctions.一些基

c++ - 等待多线程(Posix 线程,c++)

考虑以下情况:我有一个被多个线程使用的对象foo,它可能会也可能不会重复调用foo上的方法bar()。bar()被并行执行多次是完全没问题的(也是理想的),因为它永远不会改变foo的状态。当我需要从外部(从另一个线程,而不是从“工作”线程之一)更改foo的状态时,问题就出现了——我如何以某种方式锁定foo,以便调用线程阻塞直到最后一个工作线程是用bar()完成的,所有工作线程都将在bar()处阻塞,直到我再次释放foo?很明显,我不能只使用在执行bar()期间保持锁定的互斥量,因为那样我就没有并发性了。有什么想法吗?或者对于这些类型的问题是否有更好的设计?